package middleware

import (
	"context"
	"google.golang.org/grpc"
	"google.golang.org/grpc/codes"
	"google.golang.org/grpc/metadata"
	"google.golang.org/grpc/status"
)

func JWTInterceptor(ctx context.Context, req interface{},
	info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {

	// 从metadata提取token
	md, ok := metadata.FromIncomingContext(ctx)
	if !ok {
		return nil, status.Errorf(codes.Unauthenticated, "metadata is not provided")
	}

	tokens := md.Get("Authorization")
	if len(tokens) == 0 {
		return nil, status.Errorf(codes.Unauthenticated, "authorization token is not provided")
	}

	if tokens[0] == "wyn" {
		return handler(ctx, req)
	} else {
		return nil, status.Errorf(codes.Unauthenticated, "invalid authorization token")
	}
	// 验证JWT
	//context.WithValue(ctx, "claims", "xxxx")// 可以将验证后的claims信息注入到ctx中，方便取出使用获取用户信息等。
	return handler(ctx, req)
	// 将claims注入上下文
}
